Impala-তে GROUP BY এবং HAVING ক্লজগুলি ডেটা গ্রুপ করার এবং সেই গ্রুপের ওপর শর্ত প্রয়োগ করার জন্য ব্যবহৃত হয়। এগুলো মূলত aggregate functions (যেমন COUNT, SUM, AVG, MAX, MIN) এর সাথে ব্যবহৃত হয়, যা ডেটার ওপর সংক্ষেপিত বা সারাংশ বের করতে সাহায্য করে।
GROUP BY ক্লজ
GROUP BY ক্লজ ব্যবহার করে আপনি একটি নির্দিষ্ট কলামের ভিত্তিতে ডেটাকে গ্রুপ করতে পারেন। এর মাধ্যমে একে একে গ্রুপভিত্তিক ডেটার ওপর বিভিন্ন গণনা করা সম্ভব হয়। যেমন, একটি টেবিলের মধ্যে বিভিন্ন বিভাগ বা তারিখের জন্য মোট বিক্রয় হিসাব করা।
সিনট্যাক্স:
SELECT column1, aggregate_function(column2)
FROM table_name
GROUP BY column1;
এখানে:
- column1: যে কলামের উপর গ্রুপিং করতে চান।
- aggregate_function(column2): যে কলামের উপর গণনা করতে চান (যেমন SUM, COUNT, AVG ইত্যাদি)।
- table_name: টেবিলের নাম।
উদাহরণ:
ধরা যাক, আমাদের কাছে একটি sales টেবিল আছে, যেখানে বিক্রয় ডেটা রয়েছে। আমরা প্রতিটি বিভাগের মোট বিক্রয় পরিমাণ বের করতে চাই:
SELECT department, SUM(amount)
FROM sales
GROUP BY department;
এখানে, department কলামের ভিত্তিতে ডেটা গ্রুপ করা হয়েছে এবং প্রতিটি বিভাগের মোট বিক্রয় (amount) যোগ করা হয়েছে।
HAVING ক্লজ
HAVING ক্লজ সাধারণত GROUP BY এর সাথে ব্যবহৃত হয়, যেখানে গ্রুপের ওপর শর্ত প্রয়োগ করা হয়। WHERE ক্লজ সাধারণত রেকর্ডের উপর শর্ত দেয়, কিন্তু HAVING গ্রুপের ওপর শর্ত প্রয়োগ করে।
সিনট্যাক্স:
SELECT column1, aggregate_function(column2)
FROM table_name
GROUP BY column1
HAVING aggregate_function(column2) condition;
এখানে:
- aggregate_function(column2): যে কলামে অ্যাগ্রিগেট ফাংশন ব্যবহার করছেন (যেমন SUM, COUNT, AVG)।
- condition: যেটি শর্ত হিসাবে ব্যবহার করা হবে (যেমন >, <, =, >= ইত্যাদি)।
উদাহরণ:
ধরা যাক, আমরা আগের sales টেবিল থেকে শুধুমাত্র সেই বিভাগের তথ্য দেখতে চাই যেখানে বিক্রয়ের মোট পরিমাণ ১০,০০০-এর বেশি:
SELECT department, SUM(amount)
FROM sales
GROUP BY department
HAVING SUM(amount) > 10000;
এখানে, GROUP BY প্রথমে department অনুযায়ী ডেটা গ্রুপ করেছে এবং তারপর HAVING শর্ত প্রয়োগ করেছে, যেখানে মোট বিক্রয় ১০,০০০-এর বেশি হতে হবে।
GROUP BY এবং HAVING এর মধ্যে পার্থক্য
- GROUP BY: এটি ডেটাকে গ্রুপ করে, যা আপনাকে একটি নির্দিষ্ট কলাম বা ফিল্ড অনুযায়ী ডেটা সাজাতে সহায়তা করে। এটি ডেটার মধ্যে গ্রুপিং করার জন্য ব্যবহৃত হয় এবং সাধারণত aggregate functions এর সাথে ব্যবহৃত হয়।
- HAVING: এটি GROUP BY এর পর আসে এবং গ্রুপগুলোর ওপর শর্ত প্রয়োগ করতে ব্যবহৃত হয়। WHERE ক্লজ সাধারণত raw ডেটার ওপর কাজ করে, তবে HAVING গ্রুপ করা ডেটার উপর শর্ত দেয়।
GROUP BY এবং HAVING এর ব্যবহারিক উদাহরণ
উদাহরণ ১: গ্রুপিং এবং COUNT ব্যবহার
ধরা যাক, আমরা একটি employees টেবিল থেকে প্রতিটি বিভাগের মোট কর্মচারী সংখ্যা জানতে চাই:
SELECT department, COUNT(*) AS num_employees
FROM employees
GROUP BY department;
এখানে, আমরা department কলামের ভিত্তিতে গ্রুপ করেছি এবং প্রতিটি বিভাগের কর্মচারীর সংখ্যা গণনা করেছি।
উদাহরণ ২: HAVING শর্ত ব্যবহার
এবার, আমরা শুধু সেই বিভাগের কর্মচারী সংখ্যা দেখতে চাই যেখানে মোট কর্মচারী ৫০ জনের বেশি:
SELECT department, COUNT(*) AS num_employees
FROM employees
GROUP BY department
HAVING COUNT(*) > 50;
এখানে, HAVING COUNT(*) > 50 শর্তটি ব্যবহার করা হয়েছে, যার মাধ্যমে শুধুমাত্র সেই সব বিভাগ প্রদর্শিত হবে যেখানে কর্মচারীর সংখ্যা ৫০-এর বেশি।
সারাংশ
GROUP BY এবং HAVING ক্লজ Impala তে খুবই কার্যকরী। GROUP BY ডেটাকে একটি নির্দিষ্ট কলাম বা ক্ষেত্রের ভিত্তিতে গ্রুপ করে এবং HAVING সেই গ্রুপের ওপর শর্ত প্রয়োগ করে। এই দুটি ক্লজ একত্রে ডেটা বিশ্লেষণে সহায়তা করে, যেমন অ্যাগ্রিগেট ফাংশন (SUM, COUNT, AVG) ব্যবহার করে ডেটার সারাংশ বের করা এবং সেই সারাংশের ওপর শর্ত প্রয়োগ করা।
Read more